03. 查看现有工作

查看现有工作

当你是项目唯一的开发者时,很容易知道项目已经取得的进展,因为一切都由你自己完成。但如果是团队协作,事情会变得有点复杂 - 无论该团队在本地办公室,还是通过互联网一同进行开发。

有时你可能很难看到其他开发者在项目中所做的工作,特别是当开发者位于多个不同的分支上时。我如何看到 Deepesh 所做的所有 commit?或者,如果 Christine 做了更改,并表示她的 commit 能解决我们的项目票跟踪系统中的 issue 47,我们如何在仓库中发现查明这些信息?

我们可以使用非常强大的 git log 命令,查明其他开发者所做工作的详细信息。

克隆 Lighthouse 项目

我们首先需要下载一个正在进行多人协作的项目。让我们下载 Google 的 Lighthouse 项目,这是一个用于对渐进式网页应用进行审计、性能度量和提供最佳实践的应用。

这是 GitHub 上的 Lighthouse 项目

_从 GitHub 克隆 Google 的 Lighthouse 项目。_

从 GitHub 克隆 Google 的 Lighthouse 项目。

Task Description:

为确保我们的步调一致,请完成:

Task List:

Task Feedback:

完美!让我们继续!

筛选协作者的 commit

将 commit 的范围缩小到你需要的那些是一件麻烦事。我们来看看查明我们的协作者所完成工作的几种不同方式!

按 commit 作者分组

这不是一个巨大的项目,但仍有超过 1,000 个 commit 。要看到每位贡献者在此仓库中添加了多少 commit ,一个快捷的方法是使用 git shortlog 命令:

$ git shortlog

_终端正在显示运行 `git shortlog` 命令的结果。它显示了按作者排序的所有 commit 。_

终端正在显示运行 git shortlog 命令的结果。它显示了按作者排序的所有 commit 。

在上面的截图中,我们可以看到:

  • Abby Armada 在仓库中添加了一个 commit
  • Addy Osmani 添加了七个 commit
  • Adriano Caheté 添加了一个 commit
  • André Cipriani Bandarra 添加了一个 commit

git shortlog 显示了按字母顺序排序的人名列表,以及他们对应的提交说明。如果我们只想看到每个开发者的 commit 数量,我们可以添加几个选项:用 -s 仅显示 commit 的数量(而不是每个 commit 的消息),以及用 -n 来按数量排序(而不是按作者姓名的字母顺序)。

$ git shortlog -s -n

_使用 `git shortlog` 与 `-s -n` 选项,仅显示每位作者的 commit 数量,并按数量排序。_

使用 git shortlog -s -n 选项,仅显示每位作者的 commit 数量,并按数量排序。

我们可以在上图中看到,Surma 向 Lighthouse 项目添加了五个 commit 。这五个分散在整个仓库中。如果我们只想看到 Surma 的这五个 commit 呢?

按作者筛选

另一种显示某个作者所有 commit 的方法是使用常规的 git log 命令,但包含 --author 选项来筛选所述作者的 commit 。

$ git log --author=Surma

_终端应用显示了运行 `git log --author=Surma` 的结果。输出仅显示了 Surma 所做的 commit 。_

终端应用显示了运行 git log --author=Surma 的结果。输出仅显示了 Surma 所做的 commit 。

再次运行 git shortlog -s -n ,你会看到 "Paul Irish" 和 "Paul Lewis"。那如果运行下面的命令:

$ git log --author=Paul

会显示什么呢?

SOLUTION: Paul Irish 和 Paul Lewis 的 commit 都有

如果我们只想看到 Paul Lewis 的 commit ,我们需要运行:

$ git log --author="Paul Lewis"

⚠️ 引号很重要 ⚠️

注意上一个命令中使用的引号。如果它 不加 引号,像 git log --author=Paul Lewis ,就无法正常运行。如果 不加 引号,Git 会认为 Lewis 不是 "author" 选项的一部分,从而导致错误。

QUESTION:

Paul Lewis 在 Lighthouse 项目中的 第一个 commit ,其 SHA 的前七个字符是什么?

SOLUTION:

NOTE: The solutions are expressed in RegEx pattern. Udacity uses these patterns to check the given answer

按搜索内容筛选 commit

在讲解“按搜索内容筛选 commit”这部分之前,我认为我需要强调一下编写好的 描述性 提交说明的重要性。编写描述性提交说明,会使你之后能很轻松地搜索提交说明,找到你想要的东西。

另外记住,如果提交说明不足以解释 commit 的内容,则你可以在描述区域中提供关于该 commit 用途的详细说明。

我们以 commit 5966b66 为例,来说明如何在 lighthouse 项目的 commit 中包含额外详细信息:

$ git show 5966b66

_终端应用显示了 Lighthouse 项目中的 commit `5966b66`。作者提供了关于此 commit 的额外信息。_

终端应用显示了 Lighthouse 项目中的 commit 5966b66 。作者提供了关于此 commit 的额外信息。

提交说明为“配置由白名单集成运行的 Lighthouse (#1830)”。但除此之外还有一些文本。在提交说明下面,你还会看到看到几行有关 commit 的其他信息。此部分提供了有关 为何 需要此 commit 的更多信息。

那么这些详细信息为何重要呢?一方面,你将能更容易地回头查看对仓库所做的更改,其他人也更容易查看更改。另一方面是你将能根据当前说明或描述区域中的信息筛选 commit 。

我们可以使用 --grep 选项筛选 commit 。

我们再来尝试筛选提到 "bug" 一词的 commit ,使用下面任何一个命令都可以这么做:

$ git log --grep=bug
$ git log --grep bug

⚠️ 注意空格 ⚠️

注意,空格在这里也是一个问题。如果你尝试搜索包含多个词且单词之间有空格的内容,则需要将空格也包含在引号内。例如,要搜索 unit tests ,你需要使用以下命令 git log --grep="unit tests"

💡 grep 的更多说明 💡

如果你不知道 grep 是什么,那么 --grep 选项可能看起来不像是选项名称的合理选择。Grep 是一个模式匹配工具,它 不在 本课程教学范围内。但是简单介绍一下,如果你运行 git log --grep "fort" ,那么 Git 将显示顺序包含字符 f o r t 的 commit 。

有关 Grep 的更多信息,请查看我们的 Shell 讲习班课程 .

以下浏览器之一具有一个 CSS 错误,但使用一个 commit 修复了。使用 git log --grep 选项找出哪个浏览器有错误。

SOLUTION: Firefox

小结

git log 命令非常强大,你可以使用它来深入了解关于仓库的很多信息。而且,它在探索有关你与他人协作的仓库的信息这一方面很实用。你可以使用 git log 完成以下任务:

  • 使用 git shortlog 按作者对 commit 分组
    bash $ git shortlog

  • 使用 --author 选项筛选 commit

    $ git log --author="Richard Kalehoff"
  • 使用 --grep 选项筛选 commit
    bash $ git log --grep="border radius issue in Safari"

grep 是一个复杂的话题,你可以 在此维基页面 - 英 | 百度百科 - 中 上找到关于它的更多信息,或参加我们的 Shell 讲习班课程